
import java.lang.reflect.InvocationTargetException;

import org.nextcore.entity.Emp;

// 利用反射创建对象
public class EmpDemo01 {

    public static void main(final String[] args) {

        // 1.正常创建对象 :
        // 目前为止见过创建对象的方法：
        // new @Controller @Service @Daos
        final Emp emp = new Emp();
        emp.setEid(1001);
        emp.setName("狂徒张三");

        System.out.println(emp);

        System.out.println("===========================");
        try {
            // 2. 反射
            // 2.1 创建class对象 ： 全限定路径名： 包名+类名
            final Class c1 = Class.forName("org.nextcore.entity.Emp");

            // 2.2 创建对象
            // Object o = c1.newInstance();
            // 创建对象的推荐方式
            // 抛出异常 NoSuchMethodException | InvocationTargetException
            final Object o = c1.getDeclaredConstructor().newInstance();
            // o instanceof Emp 表示 o是不是 Emp类型 true/false
            System.out.println(o instanceof Emp);

            final Emp emp2 = (Emp) o;
            System.out.println(emp2);

        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | NoSuchMethodException
                | InvocationTargetException e) {
            throw new RuntimeException(e);
        }
    }

    @Override
    public String toString() {
        return "EmpDemo01 []";
    }
}
